home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 041-050 / amok49 / oprof / txt / profticks.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  126 lines

  1. (*
  2.   :Program.       ProfTicks
  3.   :Author.        Volker Rudolph
  4.   :Address.       Lettow-Vorbeck-Str. 11 / 6750 Kaiserslautern 26
  5.   :Phone.         06301/8566
  6.   :Version.       1.01
  7.   :Date.          4.11.90
  8.   :Copyright.     Volker Rudolph (Shareware)
  9.   :Language.      Oberon
  10.   :Translator.    Oberon V1.17.1
  11.   :Imports.       MicroTimer, Printf
  12.   :Contents.      Laufzeit-Statistiken über Programme
  13. *)
  14.  
  15. MODULE ProfTicks;
  16.  
  17. IMPORT d:Dos,NoGuru,io,
  18.        mi:MicroTimer,prof:ProfRunTime,p:Printf;
  19.  
  20. CONST
  21.   Limit = 200;
  22.  
  23. VAR
  24.   ticks,ticks2:LONGINT;
  25.   minutes:INTEGER;
  26.   seconds:INTEGER;
  27.   micros:LONGINT;
  28.  
  29.   (* ------------------------------------------------------------------------ *)
  30.  
  31.   PROCEDURE ^NormOdd(i:INTEGER):BOOLEAN;
  32.  
  33.   PROCEDURE NormEven(i:INTEGER):BOOLEAN;
  34.   BEGIN
  35.     IF i = 0 THEN
  36.       RETURN TRUE;
  37.     ELSE
  38.       RETURN NormOdd(i-1);
  39.     END; (* IF *)
  40.   END NormEven;
  41.  
  42.   PROCEDURE NormOdd(i:INTEGER):BOOLEAN;
  43.   BEGIN
  44.     IF i = 0 THEN
  45.       RETURN FALSE;
  46.     ELSE
  47.       RETURN NormEven(i-1);
  48.     END; (* IF *)
  49.   END NormOdd;
  50.  
  51.   PROCEDURE Norm;
  52.   VAR
  53.     res:BOOLEAN;
  54.     i:INTEGER;
  55.   BEGIN
  56.     i := 0;
  57.     WHILE i < Limit DO
  58.       res := NormEven(i);
  59.       INC(i);
  60.     END; (* WHILE *)
  61.   END Norm;
  62.  
  63.   (* ------------------------------------------------------------------------ *)
  64.  
  65.   PROCEDURE ^Odd(i:INTEGER):BOOLEAN;
  66.  
  67.   PROCEDURE Even(i:INTEGER):BOOLEAN;
  68.   BEGIN
  69.     prof.Entry("ProfTicks.Even",15);
  70.     IF i = 0 THEN
  71.       prof.Exit("ProfTicks.Even",15);
  72.       RETURN TRUE;
  73.     ELSE
  74.       prof.Exit("ProfTicks.Even",15);
  75.       RETURN Odd(i-1);
  76.     END; (* IF *)
  77.   END Even;
  78.  
  79.   PROCEDURE Odd(i:INTEGER):BOOLEAN;
  80.   BEGIN
  81.     prof.Entry("ProfTicks.Odd",98);
  82.     IF i = 0 THEN
  83.       prof.Exit("ProfTicks.Odd",98);
  84.       RETURN FALSE;
  85.     ELSE
  86.       prof.Exit("ProfTicks.Odd",98);
  87.       RETURN Even(i-1);
  88.     END; (* IF *)
  89.   END Odd;
  90.  
  91.   PROCEDURE Prof;
  92.   VAR
  93.     res:BOOLEAN;
  94.     i:INTEGER;
  95.   BEGIN
  96.     i := 0;
  97.     WHILE i < Limit DO
  98.       res := Even(i);
  99.       INC(i);
  100.     END; (* WHILE *)
  101.   END Prof;
  102.  
  103.   (* ------------------------------------------------------------------------ *)
  104.  
  105. BEGIN
  106.   p.writeProc := io.WriteString;
  107.   prof.Quiet := TRUE;
  108.  
  109.   p.Printf0("\nPlease wait ... ");
  110.   d.Delay(100);
  111.  
  112.   mi.Start;
  113.   Norm;
  114.   mi.Stop(ticks);
  115.   mi.TicksToTime(minutes,seconds,micros,ticks);
  116.   p.Printf3("\n\nNormal:  %ld min. %ld sec. %03ld msec.\n",minutes,seconds,micros DIV 1000);
  117.  
  118.   mi.Start;
  119.   Prof;
  120.   mi.Stop(ticks2);
  121.   mi.TicksToTime(minutes,seconds,micros,ticks2);
  122.   p.Printf3("OProf:   %ld min. %ld sec. %03ld msec.\n\n",minutes,seconds,micros DIV 1000);
  123.  
  124.   p.Printf1("ProfTicks: %ld\n",(ticks2-ticks) DIV (prof.TotalCalls * 2)+1);
  125. END ProfTicks.
  126.